package com.czg.jsonschema2lombokpojo.rules;

import com.czg.jsonschema2lombokpojo.Schema;

import com.fasterxml.jackson.databind.JsonNode;

/**
 * 表示一个JSONschema规则（从JSONschema生成）。可以执行或“应用”以执行与该schema规则关联的代码生成步骤。
 * 
 * @param <T>
 *            此规则可以对其进行操作的源代码项的类型
 * @param <R>
 *            由此规则生成的源代码项的类型
 */
public interface Rule<T, R> {

    /**
     * 将所需的任何Java源添加到给定的可生成对象中，以表示此schema规则。
     * 
     * @param nodeName
     *            JSONschema节点的名称
     * @param node
     *            导致应用此规则的JSONschema节点
     * @param parent
     *            {@code node}的JSON父节点
     * @param generatableType
     *            应该应用此规则的代码生成构造
     * @param currentSchema
     *            此schema规则（以及给定节点）所属的schema。
     * @return 作为执行该规则的结果而添加/创建的新生成的源代码项
     */
    R apply(String nodeName, JsonNode node, JsonNode parent, T generatableType, Schema currentSchema);

}
